<?php namespace App\Http\Controllers\Test;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route;

class TestsController extends Controller {

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function index()
	{
        // 这种简单的数组声明写法是在PHP5.4及之后的版本新增的
        // PHP5.3及之前的版本不支持该种写法
        $array = [1, 2, 3, 4];
        var_dump($array);
       
        // 项目根目录下的.env文件中的所有配置项均保存在该全局数组中
        var_dump($_ENV);
        // 也可使用env()辅助方法取得指定配置项，并且可以指定默认值（若不存在该项）
        var_dump(env('DEFAULT', 'default'));
       
        // 使用config辅助方法取得配置值
        var_dump(config('app.timezone'));
        // var_dump(config('app'));
        // config() 取得的是config目录下所有配置文件的配置值
        // var_dump(config());
        // config() 辅助方法传入数组，可以实时改变配置值，仅影响该脚本执行到的地方
        config(['app.timezone' => 'America/NewYork']);
        var_dump(config('app.timezone'));
        // 使用Config facade取得配置值
        // 注意：要使用Config类，需要在该类前引用该命名空间 use Illuminate\Support\Facades\Config;
        var_dump(Config::get('app.timezone'));
        // 设置配置项时，仅影响该脚本执行到的地方
        Config::set('app.timezone', 'America/Chicago');
        var_dump(Config::get('app.timezone'));

        // 通过App facade取得应用程序实例, 需要引用命名空间 use Illuminate\Support\Facades\App;
        var_dump(App::environment());
        // 通过app()辅助方法取得应用程序实例
        var_dump(app()->environment());

        // 项目根目录下执行php artisan down|up 开启·关闭维护模式
        // 维护模式的默认模板为resources/views/errors/503.blade.php
        //
        // {{！-- END 配置 --}}

	}

    // 控制器中直接使用路由参数
    public function userget($id, $name)
    {
        var_dump($id);
        var_dump($name);
    }
    // 使用Illuminate\Http\Request实体facade取得路由参数
    public function usergetR(Request $request)
    {
        var_dump($request->route('id'));
        var_dump($request->route('name'));
        var_dump($request);
    }
    // 利用命名路由重定向
    public function redirect()
    {
        // 使用路由名称产生url
        $url = route('foo_rr');
        var_dump($url);
        // 使用路由名称重定向
        $redirect = redirect()->route('foo_rr');
        var_dump($redirect);
        var_dump(redirect());
        // 取得目前请求的路由名称
        // use Illuminate\Support\Facades\Route;
        $name = Route::currentRouteName();
        var_dump($name);
    }

    // 使用Route::controllers()时， 该驼峰式命名则需要用 class-name 来访问
    public function getClassName() 
    {
    	dd( __CLASS__, 						// 返回该类名，加命令空间前缀
    		class_basename(__CLASS__), 		// 返回该类名，不带命名空间，laravel提供的辅助方法
    		basename(__CLASS__)			// 返回该类名，不带命名空间，php内置方法
    	);
    }

    // 路由模型绑定测试
    public function getRouteModel(Post $post)
    {
        dd($post);
    }

    public function getRouteBind($post)
    {
        dd($post);
    }

    // 闭包函数closure 作为参数传递时, 仅作为整体传递, 并不执行任何流程语句
    public function getClosure()
    {
        $key = 'test';
        $value = 'Closure';
        $closure = function () use ($key, $value) {
            return $value;
        };
        dump(function () use ($key, $value) {
            return $value;
        });
        dump($closure);
        dd($closure());
    }

}
